package cn.itrip.controller;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * Swagger API文档生成工具初始化配置信息
 * 注意JDK版本必须要1.8
 */
@EnableSwagger2 //启用swagger
@ComponentScan(basePackages = {"cn.itrip.controller"})//api接口包扫描的路径
@Configuration //启动时加载这个SwaggerConfig_auth类的配置
public class SwaggerConfig extends WebMvcConfigurationSupport {

    public static final String SWAGGER_VERSION="1.0";

    /**
     * 通过createRestApi函数创建Docket的Bean之后，
     * apiInfo()用来创建该Api的基本信息（这些基本信息会展现在文档页面中）
     * select()函数返回一个ApiSelectorBuilder实例用来控制哪些接口暴露给Swagger来展现，
     * apis()函数扫描所有Controller中定义的API， 并产生文档内容（除了被@ApiIgnore指定的请求）
     * @return
     */
    @Bean
    public Docket createRestApi(){
        return new Docket(DocumentationType.SWAGGER_2)
//				.globalOperationParameters(operationParameters)
                .apiInfo(apiInfo())//调用本类的方法,具体化去设置swagger-ui.html页面中显示的具体内容
                .select() //决定哪些接口给别人看,哪些不用
                .apis(RequestHandlerSelectors.any())// .apis(RequestHandlerSelectors.basePackage(SWAGGER_SCAN_BASE_PACKAGE))//api接口包扫描路径
                .paths(PathSelectors.any())//可以根据url路径设置哪些请求加入文档，忽略哪些请求
                .build();
    }

    /**
     * swagger-ui.html页面中显示的具体内容
     * @return
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("爱旅行-用户认证模块API")//设置文档的标题
                .description("更多内容请关注: http://http://www.itrip.test.cn/auth")//设置文档的描述->1.Overview
                .termsOfServiceUrl("http://www.itrip.test.cn/auth/")
                .contact(new Contact("幺幺科技-爱旅行项目组","http://www.itrip.test.cn/auth/","695403763@qq.com"))//设置文档的联系方式->1.2 Contact information
                //.contact("695403763@qq.com")
                .version(SWAGGER_VERSION)//设置文档的版本信息-> 1.1 Version information
                .build();
    }
}

